<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018-08-08
 * Time: 15:29
 */

namespace App\Http\Controllers\Task;


use App\Http\Controllers\Controller;
use App\Model\Account\Administration;
use App\Model\Backstage\Log;
use Illuminate\Support\Facades\DB;

class ExpiredAccountController extends Controller
{
    //转房  参数
    protected $comm_disk = 35;  //公盘对应ID
    protected $private_disk = 36; //私盘对应ID
    protected $excellent_room = 29; //优质房对应ID
    protected $ordinary_room = 28;  //普通房对应ID
    //转客  参数
    protected $comm_cus = 2;  //公客
    protected $private_cus = 1; //私客
    public function updateAccount()
    {
        set_time_limit(0);
        //查询出来所有已经过期的中介公司 h_account_number_manager
        $accountId = Administration::getExpiredAccount();
        if ($accountId) {
            //循环里面公司的ID   修改该公司下面所有的账号为禁用
            foreach ($accountId as $k => $v){
                Administration::updateAllUserStatus($v);
            }
            echo '中介公司过期未续费，修改状态完成！';
        } else {
            echo '暂无过期公司需要修改状态！';
        }

    }

    /**
     *删除所有中介公司  三个月之前的操作日志
     */
    public function delLog()
    {
        set_time_limit(0);
        /**
         * 查询出来所有有效中介公司的ID    循环ID   得出所有中介公司的日志操作表
         *
         * 循环删除每一张表里面的日志记录
         */
        $idArr = explode(',', Administration::getAllBranchId());
        foreach($idArr as $k=>$v) {
            self::delLogForId($v);
        }
        echo '删除日志完成！';
    }


    /**
     * 定时器  删除三个月之前的操作数据
     */
    public function delLogForId($id)
    {
        $time = strtotime(date('Y-m-d',strtotime('-3 month')).' 00:00:00');
        DB::table('log_'.$id)->where('l_create_time', '<', $time)->delete();
    }

    /**
     *定时器   系统自动定期执行  每一个中介公司  所设置启用状态下转房客的规则
     */
    public function autoUpdateStatus()
    {
        set_time_limit(0);
        $idArr = explode(',', Administration::getAllBranchId());
        foreach ($idArr as $value) {
            $rule = self::getRule($value);//根据公司ID   查询出来该公司所有的启用规则
            if (sizeof($rule) > 0) {
                foreach ($rule as $v) {
                    if($v->a_move_type == 0 || $v->a_move_type == 2){  //私盘转公盘  取消优质房
                        self::updateRuleDisk(self::object_to_array($v));
                    }elseif($v->a_move_type == 1){  //私客转公客
                        self::updateRuleCustomers(self::object_to_array($v));
                    }
                }
            }
        }
        echo '执行完毕！';
    }
    /**
     * 对象 转 数组
     *
     * @param object $obj 对象
     * @return array
     */
    function object_to_array($obj) {
        $obj = (array)$obj;
        foreach ($obj as $k => $v) {
            if (gettype($v) == 'resource') {
                return;
            }
            if (gettype($v) == 'object' || gettype($v) == 'array') {
                $obj[$k] = (array)object_to_array($v);
            }
        }
        return $obj;
    }
    /**
     * 根据中介公司的ID   查询出来 该中介公司下面所有启用的转房客规则数据
     */
    public function getRule($branchId)
    {
        return DB::table('move_rule')->where('a_b_id', $branchId)->where('a_status', 1)->get();
    }

    /**转房规则
     * @param $param
     * @return mixed
     */
    public  function updateRuleDisk($param){
        $map = self::dateMapRoom($param);
        $res = self::updateRoomDisk($map, $param, $param['a_move_type']);
        return $res;
    }
    public function dateMapRoom($param){
        $map = [];
        $times = time() - 60 * 60 * 24 * $param['a_day_num'];
        switch($param['a_date_type']){   //判断查找时间类型
            case 0: //最后跟进日期
                $map[] = ['r_follow_time', '<=', $times];
                break;
            case 1: //委托日
                $map[] = ['r_entrust_at', '<=', $times];
                break;
            case 2:  //录入日
                $map[] = ['r_created_at', '<=', $times];
                break;
            default:
                break;
        }
        return $map;
    }

    /**
     * @param $map
     * @param $params
     * @return mixed
     * 更新房屋公私盘 取消优质房
     */
    public function updateRoomDisk($map, $params, $type)
    {
        if(isset($params['a_d_id']) && $params['a_d_id'] != '' && $params['a_d_id'] != 0){  //部门ID
            $map[] = ['r_d_id', $params['a_d_id']];
        }

        if(isset($params['a_trade_type']) && $params['a_trade_type'] != '' && $params['a_trade_type'] != 0){  //交易类型  出租 出售
            $map[] = ['trading_type', $params['a_trade_type']];
        }
        if(isset($params['a_m_status']) && $params['a_m_status'] != '' && $params['a_m_status'] != 0){
            //房源状态 有效  无效 我租等
            $map[] = ['status', $params['a_m_status']];
        }
        if(isset($params['a_use_type']) && $params['a_use_type'] != '' && $params['a_use_type'] != 0){  //房源用途
            $map[] = ['use_type', $params['a_use_type']];
        }
        $update_data = [];
        //时间的判断条件    所有值     转移类型 0私盘转公盘 1私客转公客 2取消优质房

        if($type == 0){  //修改私盘到公盘
            $map[] = ['disc_type', $this->private_disk];     //查找对应条件所有私盘 私盘不包括 封盘 特盘
            $update_data = [
                'disc_type' => $this->comm_disk,
                'r_updated_at' => time()
            ];
        }elseif($type == 2){  //取消优质房
            $map[] = ['type_of_house_sale', $this->excellent_room];    //查询对应条件优质房进行修改
            $update_data = [
                'type_of_house_sale' => $this->ordinary_room,
                'r_updated_at'       => time()
            ];
        }
        if(isset($params['a_entrust_way']) && $params['a_entrust_way'] != 0  && $params['a_entrust_way'] != ''){
            $entrust_arr = explode(',', $params['a_entrust_way']);
            return DB::table('room_info_'.$params['a_b_id'])
                ->where($map)
                ->whereIn('entrust_way',$entrust_arr)
                ->update($update_data);
        }else{
            return DB::table('room_info_'.$params['a_b_id'])->where($map)->update($update_data);
        }
    }

    /**
     * 自动转客
     */

    /**
     * @param $param
     * 自动更新客源对应信息
     */
    public function updateRuleCustomers($param){
        $map = self::dateMap($param);
        return self::saveCustomersAuth($map, $param);
    }

    /**
     * @param $param
     * @return array
     * 日期类型判断条件
     */
    public function dateMap($param){
        $map = [];
        $times = time() - 60 * 60 * 24 * $param['a_day_num'];
        switch($param['a_date_type']){   //判断查找时间类型
            case 0: //最后跟进日期
                $map[] = ['c_followup_time', '<=', $times];
                break;
            case 1: //委托日
                $map[] = ['c_entrust_time', '<=', $times];
                break;
            case 2:  //录入日
                $map[] = ['c_created_at', '<=', $times];
                break;
            default:
                break;
        }
        return $map;
    }
    /**
     * @param $map
     * @param $params
     * @return mixed
     * 修改客源私-公
     */
    public function saveCustomersAuth($map, $params){

        $map[] = ['c_private_guest', $this->private_cus];
        if(isset($params['a_d_id']) && $params['a_d_id'] != 0  && $params['a_d_id'] != ''){  //部门ID
            $map[] = ['c_store_id', $params['a_d_id']];
        }
        if(isset($params['a_trade_type']) && $params['a_trade_type'] != 0  && $params['a_trade_type'] != ''){  //交易类型
            $map[] = ['c_trading_type', $params['a_trade_type']];
        }
        if(isset($params['a_m_status']) && $params['a_m_status'] != 0  && $params['a_m_status'] != ''){   //客源状态
            $map[] = ['c_buy_status', $params['a_m_status']];
        }
        if(isset($params['a_use_type']) && $params['a_use_type'] != 0 && $params['a_use_type'] != ''){  //客源用途
            $map[] = ['c_use_type', $params['a_use_type']];
        }
        if(isset($params['a_entrust_way']) && $params['a_entrust_way'] != 0 && $params['a_entrust_way'] != ''){  //委托方式
            $entrust_arr = explode(',', $params['a_entrust_way']);
            return DB::table('customers_'.$params['a_b_id'])
                ->where($map)
                ->whereIn('c_entrust_type', $entrust_arr)
                ->update([
                    'c_private_guest' => $this->comm_cus,
                    'c_update_at'      => time()
                ]);
        }else{
            return DB::table('customers_'.$params['a_b_id'])
                ->where($map)
                ->update([
                'c_private_guest' => $this->comm_cus,
                'c_update_at'      => time()
            ]);
        }

    }
}